<?php
!defined('P_W') && exit('Forbidden');

/**
 * 举报服务类
 * @author bingbing.renbb@2010-8-25
 *
 */
class PW_HouseReportService {
	var $_houseReportDB;
	/**
	 * 构造函数
	 */
	function PW_HouseReportService() {
		$this->__construct();
	}
	
	function __construct() {
		$this->_houseReportDB = $this->_getReportDB();
	}
	
	/**
	 * 增加一条举报信息
	 * @param	array	$data	各字段的值，字段名为键名
	 * @return	integer			插入的ID
	 */
	function add($data) {
		return $this->_houseReportDB->addReport($data);	
	}
	
	/**
	 * 查询一个房源是否已经被举报过
	 * @param $houseid 房源id
	 * @return mixed  严格等于false表示没被举报过
	 */
	function checkReport($houseid, $type) {
		$type = $type == 'hire' ? 1 : 0;
		return $this->_houseReportDB->checkReport($houseid, $type);
	}
	
	/**
	 * 删除一条举报记录
	 * @param	mixed	$id 	要删除的记录ID
	 * @return  integer			影响的行数
	 */
	function delete($id) {
		return $this->_houseReportDB->deleteReport($id);
	}
	
	/**
	 * 删除多条举报记录
	 * @param	mixed	$ids	要删除的记录ID
	 * @return  integer			影响的行数
	 */
	function deletes($ids) {
		return $this->_houseReportDB->deleteReports($ids);
	}
	
	/**
	 * 标记一条举报记录为已处理
	 * @param	mixed	$id 	要更新的记录ID
	 * @return  integer 		影响的行数
	 */
	function update($id) {
		global $admin_name,$db_bbsurl;
		$this->_houseReportDB->updateReport($id);
		$report = $this->_houseReportDB->getReportsById($id);
		$this->_sendNotice($report);
		return true;
	}
	
	/**
	 * 标记多条举报记录为已处理
	 * @param	mixed	$ids	要更新的记录ID
	 * @return  integer 		影响的行数
	 */
	function updates($ids) {
		global $admin_name,$db_bbsurl;
		$this->_houseReportDB->updateReports($ids);	
		$report = $this->_houseReportDB->getReportsByIds($ids);
		foreach($report as $value) {
			$this->_sendNotice($value);
		}
		return true;
	}
	
	/**
	 * 取得举报的URL
	 * @param $type
	 * @param $houseid
	 */
	function getReportUrl($type,$houseid){
		$q = $type ? 'hire' : 'sale';
		return 'index.php?m=house&q='.$q.'&a=houseinfo&houseid='.$houseid;
	}
	
	/**
	 * 取得举报记录,有分页
	 * @param	integer	$handle	0为未处理，1为已处理
	 * @param	integer	$type	0为二手房，1为租房
	 * @param	integer	$page	分页中的第几页
	 * @return	array			查询结果 
	 */
	function get($handle, $type, $page) {
		return $this->_getData($this->_houseReportDB->getReports($handle, $type, $page));
	}
	
	/**
	 * 根据是否已经处理取得举报记录,有分页
	 * @param	integer	$handle	0为未处理，1为已处理
	 * @param	integer	$page	分页中的第几页
	 * @return	array			查询结果 
	 */
	function getByHandle($handle, $page) {
		return $this->_getData($this->_houseReportDB->getReportsByHandle($handle, $page));
	}
	
	/**
	 * 根据id取得举报记录
	 * @param	integer	$id	记录的ID
	 * @return	array		查询结果 
	 */
	function getById($id) {
		return $this->_getData($this->_houseReportDB->getReportsById($id));
	}
	
	/**
	 * 根据是否已经处理和举报类型统计总数
	 * @param	integer	$handle	0为未处理，1为已处理
	 * @param	integer	$type	0为二手房，1为租房
	 * @return	integer	$number	记录数 
	 */
	function count($handle, $type) {
		return $this->_houseReportDB->count($handle, $type);
	}
	
	/**
	 * 根据是否已经处理统计总数
	 * @param	integer	$handle	0为未处理，1为已处理
	 * @return	integer	$number	记录数 
	 */
	function countByHandle($handle) {
		return $this->_houseReportDB->countByHandle($handle);	
	}
	
	/**
	 * 载入举报DAO类
	 * @return object 举报DAO对象
	 */
	function _getReportDB() {
		return House::loadDB('house_report');
	}
	
	/**
	 * 发送通知
	 * @param array $notice
	 */
	function _sendNotice($notice) {
		global $admin_name,$db_bbsurl;
		if (!S::isArray($notice)) return false;
		M::sendNotice(
				array($notice['username']),
				array(
					'title' => getLangInfo('writemsg','report_deal_title'),
					'content' => getLangInfo('writemsg','report_deal_content',array(
						'manager'	=> $admin_name,
						'url'		=> $db_bbsurl . "/" . $this->getReportUrl($notice['type'], $notice['id']),
						'admindate'	=> get_date($notice['time']),
						'reason'	=> stripslashes($notice['reason']),
						'type'		=> $notice['type']  ? '出租' : '出售',
					)),
				)
			);	
	}
	
	/**
	 * 返回二维数组的原有格式
	 * @param array $data 待操作的数据
	 * @return array	操作后的结果
	 */
	function _getData($data) {
		if (!S::isArray($data)) return array();
		foreach ($data as $key => &$value) {
			is_array($value) && $value = $this->_cookData($value);
		}
		return $data;
	}
	
	/**
	 * 返回一位数组的原有格式
	 * @param array $data 待操作的数据
	 * @return array  操作后的结果
	 */
	function _cookData($data){
		if (!S::isArray($data)) return array();
		$data['url'] = urldecode(html_entity_decode($data['url']));
		$data['time'] = get_date($data['time']);
		$data['typename'] = empty($data['type']) ? '出售房源' : '出租房源';
		return $data;
	}
}
?>